// 第2题：给定一个最大容量为 M 的堆栈，将 N 个数字按 1, 2, 3, ..., N 的顺序入栈，允许按任何顺序出栈，则哪些数字序列是不可能得到的？例如给定 M=5、N=7，则我们有可能得到{ 1, 2, 3, 4, 5, 6, 7 }，但不可能得到{ 3, 2, 1, 7, 5, 6, 4 }。
// 输入格式：
// 输入第一行给出3个不超过1000 的正整数：M（堆栈最大容量）、N（入栈元素个数）、K（待检查的出栈序列个数）。最后 K 行，每行给出 N 个数字的出栈序列。所有同行数字以空格间隔。
// 输出格式：
// 对每一行出栈序列，如果其的确是有可能得到的合法序列，就在一行中输出YES，否则输出NO。
// 输入样例：
// 5 7 5
// 1 2 3 4 5 6 7
// 3 2 1 7 5 6 4
// 7 6 5 4 3 2 1
// 5 6 4 3 7 2 1
// 1 7 6 5 4 3 2

// 输出样例：
// YES
// NO
// NO
// YES
// NO
#include <iostream>
#include <stack>
#include <vector>
using namespace std;
bool judge(int vmax, vector<int> popped) {
    stack<int> st;
    size_t v = 0;
    int elem = 1;
    int len = popped.size();
    for (auto i: popped) {
        while (st.empty() || i != st.top()) {
            st.push(elem);
            if (v >= vmax) {
                return false;
            }
            ++v;
            ++elem;
        }
        if (!st.empty() && i == st.top()) {
            st.pop();
            --v;
        }
    }
    return st.empty();    
}
int main(void) {
    int vmax, len, nums;
    cin >> vmax; // 栈最大容量
    cin >> len; // 输入序列长度
    cin >> nums; // 输入序列个数
    vector<vector<int>> test(nums, vector<int>(len, 0));
    for (auto &s: test) {
        for (int &i: s) {
            cin >> i;
        }
    }
    // for (int i = 0; i < test.size(); ++i) {
    //     for (int j = 0; j < test[i].size(); ++j) {
    //         cout << test[i][j];
    //     }
    //     cout << endl;
    // }
    for (auto s: test) {
        if (judge(vmax, s))
            cout << "yes";
        else
            cout << "no";
        cout << endl;
    }

    return 0;
}
